local array = {}

--打印测试数据接口
function array:print()
    for _, v in ipairs(self.data) do
        print(v)
    end
    print("===================分割线===================")
end

--添加数据接口
function array:push(x)
    if x == nil then
        error("请正确输入参数")
    end
    self.size = self.size + 1
    self.data[self.size] = x
end

  --插入数据接口
function array:insert(pos, x)
    local size = self.size
    if pos < 1 or pos > size then
        error("添加位置索引越界")
    end
    if type(x) ~= "number" then
        error("请填写有number类型数值")
    end
    for i = size+1, pos+1, -1 do
        self.data[i] = self.data[i-1]
    end
    self.data[pos] = x
    self.size = size + 1
end

--根据index移除数据
function array:remove(pos)
    local size = self.size
    if pos < 1 or pos > size then
        error("添加位置索引越界")
    end
    for i = pos, size do
        self.data[i] = self.data[i+1]
    end
    self.size = size - 1
end

--出栈
function array:pop()
    local size = self.size
    local _data = self.data[size]
    self.data[size] = nil
    self.size = size - 1
    return _data
end

--清空数组
function array:clear()
    self.data = {}
    self.size = 0
end

local function Array()
    local o ={}
    setmetatable(o, array)
    array.__index = array
    o.data = {}
    o.size = 0
    return o
end

return Array
